package Day_0207.Redis;

/**
 * @author zxc
 * @date 2023/02/07 22:27
 **/
public class Redis_Cluster {
    public static void main(String[] args) {
        /**
         * Redis_Cluster集群原理
         * ===》
         * 1.Redis Cluster集群的原理 ：
         * （1）所有的节点相互连接
         * （2）集群消息通信通过集群总线通信，集群总线端口大小为客户端服务端口 + 10000（固定值）
         * （3）节点与节点之间通过二进制协议进行通信
         * （4）客户端和集群节点之间通信和通常一样，通过文本协议进行
         * （5）集群节点不会代理查询
         * （6）数据按照 Slot 存储分布在多个 Redis 实例上
         * （7）集群节点挂掉会自动故障转移
         * （8）可以相对平滑扩/缩容节点
         *
         * 2.
         * （1）Redis 集群中内置了 16384 个哈希槽，
         * （2）当需要在 Redis 集群中放置一个 key-value 时，redis 先对key 使用 crc16 算法算出一个结果，
         * （3）然后把结果对 16384 求余数，这样每个 key 都会对应一个编号在 0~16383 之间的哈希槽，
         * （4）redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
         *
         */

        /**
         * Redis Cluster集群在什么情况下，会导致整个Redis集群都不可用
         * ===》
         * 1.Redis 没有使用哈希一致性算法，而是使用哈希槽。
         * Redis 中的哈希槽一共有 16384 个，计算给定密钥的哈希槽，我们只需要对密钥的 CRC16 取摸 16384。
         *
         * 2.假设集群中有 A、B、C 三个集群节点，
         * 不存在复制模式下，每个集群的节点包含的哈希槽如下：
         * （1）节点 A 包含从 0 到 5500 的哈希槽；
         * （2）节点 B 包含从 5501 到 11000 的哈希槽；
         * （3）节点 C 包含从 11001 到 16383 的哈希槽；
         * 这时，如果节点 B 出现故障，整个集群就会出现缺少 5501 到 11000 的哈希槽范围而不可用。
         *
         * ===》
         * 总结 ：
         * （1）Redis集群中，每一个节点都对应着若干个哈希槽;
         * （2）若是某个Redis节点崩溃的话，那么其所对应的若干个哈希槽也会失效;
         *
         */

        /**
         * Redis集群架构模式有哪几种？
         * ===》
         * 1.Redis 集群架构是支持单节点单机模式的，
         * （Redis Sentinel，Redis单机模式）
         *
         * 2.支持一主多从的主从结构，还支持带有哨兵的集群部署模式。
         *
         */
    }
}
